home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / fb386smp / fs / dos.asm next >
Assembly Source File  |  1994-09-20  |  7KB  |  301 lines

  1. ;=========================================================================
  2. ;    âtâ@âCâïâtâ@âôâNâVâçâô
  3. ;=========================================================================
  4.  
  5. ;386|ASMé┼é═ë║é╠éRìsé≡ùLî°é╔é╖éΘ
  6. ;    .386p
  7. ;cseg    segment dword public ER use32 'CODE'
  8. ;assume    cs:cseg,ds:cseg
  9.  
  10. ;----------------------------------------------------------------------
  11. ;   ï@ö\î─é╤Åoé╡
  12. ;----------------------------------------------------------------------
  13.     jmp    seachIcnSel
  14.     jmp    memCpy
  15.     jmp    getFreeSpace
  16.     jmp    isFixed
  17.     jmp    isExist
  18.     jmp    findFirst
  19.     jmp    findNext
  20.     jmp    getCurrentDrv
  21.     jmp    getCurrentDir
  22.  
  23. ;----------------------------------------------------------------------
  24. ;    âJâîâôâgâfâBâXâNé╠ĵô╛
  25. ;        callm(ENTRY,varptr(drv$))
  26. ;----------------------------------------------------------------------
  27. getCurrentDrv:
  28.     mov        ah,19h
  29.     int        21h
  30.     mov        edi,dword ptr [esp+4]
  31.     mov        edi,dword ptr [edi]
  32.     movzx    eax,al
  33.     push    eax
  34.     add        al,'A'
  35.     mov        [edi],al
  36.     pop        eax
  37.     inc        eax
  38.     ret
  39. ;----------------------------------------------------------------------
  40. ;    âJâîâôâgâfâBâîâNâgâèé╠ĵô╛
  41. ;        callm(ENTRY,DriveNo,varptr(dir$)) DriveNo=1ü`26
  42. ;----------------------------------------------------------------------
  43. getCurrentDir:
  44.     mov        dl,[esp+4]
  45.     mov        esi,dword ptr [esp+8]
  46.     mov        esi,dword ptr [esi]
  47.     mov        ah,47h
  48.     int        21h
  49.     jc        DrError
  50.     xor        eax,eax
  51.     ret
  52.  
  53. ;----------------------------------------------------------------------
  54. ;    âtâ@âCâïé╠îƒì⌡(éPôxû┌)
  55. ;        callm(ENTRY,varptr(wild$),attr,varptr(fileName$),varptr(attr),varptr(size))
  56. ;----------------------------------------------------------------------
  57. findFirst:
  58.     push    ebp
  59.     mov        ebp,esp
  60.     add        ebp,8
  61.     push    es
  62.     push    ds
  63.     pop        es
  64.  
  65.     mov        edx,offset DTA        ;DTAé╠É▌ÆΦ
  66.     mov        ah,1ah
  67.     int        21h
  68.  
  69.     mov        edx,[ebp]            ;Æ▓é╫éΘâtâ@âCâïû╝é╠âAâhâîâXé≡É▌ÆΦ
  70.     mov        edx,[edx]
  71.     mov        ecx,[ebp+4]            ;Æ▓é╫éΘâtâ@âCâïé╠âAâgâèârâàü[âgé≡É▌ÆΦ
  72.     mov        ah,4eh
  73.     int        21h
  74.     jc        FindError
  75.  
  76.     mov        esi,offset DTA
  77.     movzx    eax,byte ptr [esi+15h]
  78.     mov        edi,[ebp+12]        ;î⌐é┬é»é╜âtâ@âCâïé╠âAâgâèârâàü[âgé≡ò╘é╖
  79.     mov        dword ptr [edi],eax
  80.  
  81.     mov        eax,dword ptr [esi+1ah]
  82.     mov        edi,[ebp+16]        ;î⌐é┬é»é╜âtâ@âCâïé╠æσé½é│é≡ò╘é╖
  83.     mov        dword ptr [edi],eax
  84.  
  85.     mov        eax,dword ptr [esi+16h]
  86.     mov        edi,[ebp+20]        ;î⌐é┬é»é╜âtâ@âCâïé╠ì∞ɼöNîÄé≡ò╘é╖
  87.     mov        dword ptr [edi],eax
  88.  
  89.     mov         esi,offset DTA+1eh
  90.     mov        edi,[ebp+8]            ;î⌐é┬é»é╜âtâ@âCâïû╝é≡ò╘é╖
  91.     mov        edi,[edi]
  92.     mov        ecx,13
  93.     rep movsb
  94.  
  95.     xor        eax,eax
  96.     pop        es
  97.     pop        ebp
  98.     ret
  99. FindError:
  100.     xor        eax,eax
  101.     dec        eax
  102.     pop        es
  103.     pop        ebp
  104.     ret
  105.  
  106. ;----------------------------------------------------------------------
  107. ;    âtâ@âCâïé╠îƒì⌡(éQôxû┌ê╚ì~)
  108. ;        callm(ENTRY,varptr(fileName$),varptr(attr),varptr(size))
  109. ;----------------------------------------------------------------------
  110. findNext:
  111.     push    ebp
  112.     mov        ebp,esp
  113.     add        ebp,8
  114.     push    es
  115.     push    ds
  116.     pop        es
  117.  
  118.     mov        ah,4fh
  119.     int        21h
  120.     jc        FindError
  121.  
  122.     mov        esi,offset DTA
  123.     movzx    eax,byte ptr [esi+15h]
  124.     mov        edi,[ebp+4]            ;î⌐é┬é»é╜âtâ@âCâïé╠âAâgâèârâàü[âgé≡ò╘é╖
  125.     mov        dword ptr [edi],eax
  126.  
  127.     mov        eax,dword ptr [esi+1ah]
  128.     mov        edi,[ebp+8]            ;î⌐é┬é»é╜âtâ@âCâïé╠æσé½é│é≡ò╘é╖
  129.     mov        dword ptr [edi],eax
  130.  
  131.     mov        eax,dword ptr [esi+16h]
  132.     mov        edi,[ebp+12]            ;î⌐é┬é»é╜âtâ@âCâïé╠ì∞ɼöNîÄé≡ò╘é╖
  133.     mov        dword ptr [edi],eax
  134.  
  135.     mov         esi,offset DTA+1eh
  136.     mov        edi,[ebp]            ;î⌐é┬é»é╜âtâ@âCâïû╝é≡ò╘é╖
  137.     mov        edi,[edi]
  138.     mov        ecx,13
  139.     rep movsb
  140.  
  141.     xor        eax,eax
  142.     pop        es
  143.     pop        ebp
  144.     ret
  145.  
  146. ;----------------------------------------------------------------------
  147. ;    FreeSpaceé≡ô╛éΘ
  148. ;        callm(ENTRY,DriveNo) DriveNo=1ü`26
  149. ;----------------------------------------------------------------------
  150. getFreeSpace:
  151.     mov     dl,[esp+4]
  152.     mov     ah,36h
  153.     int     21h
  154.     cmp        ax,0ffffh
  155.     je        DrError
  156.     xor        edx,edx
  157.     and        eax,0ffffh
  158.     and        ebx,0ffffh
  159.     and        ecx,0ffffh
  160.     mul        ebx
  161.     mul        ecx
  162.     ret
  163.  
  164. ;----------------------------------------------------------------------
  165. ;    î≡è╖ë┬ö\âfâBâXâNé⌐
  166. ;        callm(ENTRY,DriveNo) DriveNo=1ü`26
  167. ;        ret=0 removal  ret=1 Fixed
  168. ;----------------------------------------------------------------------
  169. isFixed:
  170.     mov     bl,[esp+4]
  171.     mov     ax,4408h
  172.     int     21h
  173.     jc        DrError
  174.     movzx    eax,ax
  175.     ret
  176. ;----------------------------------------------------------------------
  177. ;    âhâëâCâuæ╢ì▌â`âFâbâN
  178. ;        callm(ENTRY,DriveNo) DriveNo=1ü`26
  179. ;----------------------------------------------------------------------
  180. isExist:
  181.     mov     bl,[esp+4]
  182.     mov     ax,4409h
  183.     int     21h
  184.     jc        DrError
  185.     movzx    eax,ax
  186.     ret
  187.  
  188. DrError:
  189.     xor    eax,eax
  190.     dec    eax
  191.     ret
  192.  
  193.  
  194. ;----------------------------------------------------------------------
  195. ;    24ü~24dotâAâCâRâôé╠âZâîâNâ^îƒì⌡
  196. ;            callm seachIcnSel
  197. ;----------------------------------------------------------------------
  198.  
  199. ;    24ü~24dotâAâCâRâô
  200. ;        âIâtâZâbâg 0x16  î┬Éö80î┬(ü~2)
  201.  
  202. ;    32ü~32dotâAâCâRâô
  203. ;        âZâOâüâôâgâZâîâNâ^ 108h âIâtâZâbâg 0x28000  î┬Éö128î┬(ü~2)
  204. ;
  205. seachIcnSel:
  206.  
  207.     push    fs
  208.     push    es
  209.     push    ebx
  210.     push    esi
  211.  
  212.     mov        eax,30h                ;LDTé╠éáéΘâZâOâüâôâgé╠alias
  213.     mov        es,ax
  214.     xor        esi,esi
  215.     mov        ebx,4
  216.  
  217. sel_loop:
  218.     mov        al,es:[esi+5]        ;âfâXâNâèâvâ^æ«É½é╠P=0é╚éτâZâOâüâôâgé¬é╚éó
  219.     test    al,80h                ;é╠é┼âGâëü[
  220.     je    short seach_error
  221.  
  222.     mov        al,es:[esi+6]        ;âfâXâNâèâvâ^æ«É½é╠G=1é╚éτâyü[âWÆPê╩
  223.     test    al,80h
  224.     jne    short skip_01
  225.     mov        ax,es:[esi]            ;âZâOâüâôâgâèâ~âbâgé╠æσé½é│é═éSûóû₧üH
  226.     cmp        ax,4
  227.     jl    short SearchNext
  228. skip_01:
  229.     
  230.     mov        al,es:[esi+5]        ;âfâXâNâèâvâ^æ«É½é╠TYPE=8,9,C,Dé╚éτÄ└ìsÉΩùp
  231.     and        al,0fh
  232.     cmp        al,8
  233.     je    short SearchNext
  234.     cmp        al,9
  235.     je    short SearchNext
  236.     cmp        al,0ch
  237.     je    short SearchNext
  238.     cmp        al,0dh
  239.     je    short SearchNext
  240.  
  241.     mov        fs,bx
  242.     cmp        dword ptr fs:[0],'NOCI'    ;ICONé╠âZâOâüâôâgé⌐üH
  243.     je    short find_sel
  244. SearchNext:
  245.  
  246.     add        esi,8
  247.     add        ebx,8
  248.     jmp    short sel_loop
  249.  
  250. find_sel:
  251.     mov        eax,ebx
  252.     pop        esi
  253.     pop        ebx
  254.     pop        es
  255.     pop        fs
  256.  
  257.     ret
  258.  
  259. seach_error:    
  260.     xor        eax,eax
  261.     dec        eax
  262.     pop        esi
  263.     pop        ebx
  264.     pop        es
  265.     pop        fs
  266.  
  267.     ret
  268.  
  269. ;----------------------------------------------------------------------
  270. ;    âüâéâèâRâsü[
  271. ;            callm MEMCPY,destSeg,destOffset,srcSeg,srcOffset,bytes
  272. ;----------------------------------------------------------------------
  273. memCpy:
  274.     push    ebp
  275.     mov        ebp,esp
  276.     add        ebp,8
  277.     push    es
  278.     push    ds
  279.     mov        edi,dword ptr [ebp+4]
  280.     mov        esi,dword ptr [ebp+12]
  281.     mov        ecx,dword ptr [ebp+16]
  282.     mov        eax,dword ptr [ebp]
  283.     mov        es,ax
  284.     mov        eax,dword ptr [ebp+8]
  285.     mov        ds,ax
  286.     rep movsb
  287.  
  288.     pop        ds
  289.     pop        es
  290.     pop        ebp
  291.     ret
  292.  
  293. ;----------------------------------------------------------------------
  294. ;    âÅü[âNâGâèâA
  295. ;----------------------------------------------------------------------
  296. DTA     db  128 dup(?)
  297.  
  298. ;386|ASMé┼é═ë║é╠éPìsé≡ùLî°é╔é╖éΘ
  299. ;cseg    ends
  300.     end
  301.